﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLL_MechSys;
using DTO_MechSys;

namespace FORMS_MechSys
{
    public partial class frmAgendamentoListar : Form
    {
        BLLAgendamento bllAgendamento = new BLLAgendamento();
        DataTable dataTableAgendamentos;

        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();
        BLLCor bllCor = new BLLCor();

        
        

        static int status = 1;
        static int agendamentoID, status2, status3, status4;

        public frmAgendamentoListar()
        {
            InitializeComponent();
            SetColors();
            dtTimePck.Value = DateTime.Now;
            this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
        }

        private void SetColors()
        {
            dtoCorPrincipal = bllCor.Buscar("Principal");
            btnAgendado.BackColor = btnAvancar.BackColor = btnCancelado.BackColor = btnFaltou.BackColor = btnPesquisar.BackColor =
            btnAgendadoT.BackColor = btnCanceladoT.BackColor = btnFaltouT.BackColor = btnAvancar.BackColor = btnAgendar.BackColor =
            label4.BackColor = tlpMenuStripCenter.BackColor = tlpMenuStripRigth.BackColor = tlpMenuStripLeft.BackColor =
            tableLayoutPanel4.BackColor = tableLayoutPanel3.BackColor = tableLayoutPanel2.BackColor = btnSair.BackColor = 
            tableLayoutPanel5.BackColor = btnVoltar.BackColor = groupBox1.BackColor = groupBox2.BackColor = 
            dtoCorPrincipal.Cor;

            dtoCorFundo =  bllCor.Buscar("Fundo");
            tlpMenuStrip.BackColor = dtoCorFundo.Cor;
            //dtGridViewManha.BackColor = dtoCorFundo.Cor;

            dtoCorDataGrid = bllCor.Buscar("DataGrid");
            dtGridViewManha.BackgroundColor = dtGridViewTarde.BackgroundColor = dtoCorDataGrid.Cor;

            dtoCorLetra = bllCor.Buscar("Letra");
            btnAgendado.ForeColor = btnAvancar.ForeColor = btnCancelado.ForeColor = btnFaltou.ForeColor =
              btnAgendadoT.ForeColor = btnCanceladoT.ForeColor = btnFaltouT.ForeColor = btnAvancar.ForeColor = btnVoltar.ForeColor =
              btnAgendar.ForeColor = btnSair.ForeColor = chkAgendados.ForeColor = chkCancelados.ForeColor =
              chkConcluidos.ForeColor = chkFaltou.ForeColor = chkTodos.ForeColor = label4.ForeColor = dtoCorLetra.Cor;


        }

        private void frmAgendamento_Load(object sender, EventArgs e)
        {
            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
            dtTimePck.Value = DateTime.Now;
        }

        public DataTable PopulaGrid(DateTime data, byte turno)
        {
            DataTable dataTableGridView = new DataTable();
            DataRow dataRow;

            if (chkTodos.Checked)
            {
                dataTableAgendamentos = bllAgendamento.BuscarAgendamentoPorData(data, turno);
            }
            else
            {
                dataTableAgendamentos = bllAgendamento.BuscarAgendamentoPorDataeStatus(data, turno, status, status2, status3, status4);
            }

            if (dataTableAgendamentos.Rows.Count > 0)
            {
                dataTableGridView.Columns.Add("AgendamentoID", typeof(int));
                dataTableGridView.Columns.Add("NomeCompleto", typeof(string));
                dataTableGridView.Columns.Add("Contato", typeof(string));
                dataTableGridView.Columns.Add("HoraRegistro", typeof(string));
                dataTableGridView.Columns.Add("Veiculo", typeof(string));
                dataTableGridView.Columns.Add("Placa", typeof(string));
                dataTableGridView.Columns.Add("StatusAtual", typeof(string));

                for (int i = 0; i < dataTableAgendamentos.Rows.Count; i++)
                {
                    dataRow = dataTableGridView.NewRow();

                    dataRow["AgendamentoID"] = dataTableAgendamentos.Rows[i]["AgendamentoID"];

                    string nomeCompleto = string.Format("{0} {1}", ((string)dataTableAgendamentos.Rows[i]["Nome"]), ((string)dataTableAgendamentos.Rows[i]["Sobrenome"]));
                    dataRow["NomeCompleto"] = nomeCompleto;

                    string contato = string.Format("{0} / {1}", ((string)dataTableAgendamentos.Rows[i]["Telefone"]), ((string)dataTableAgendamentos.Rows[i]["Celular"]));
                    dataRow["Contato"] = contato;

                    DateTime dataRegistro = Convert.ToDateTime(dataTableAgendamentos.Rows[i]["DataRegistro"]);
                    dataRow["HoraRegistro"] = string.Format("{0}:{1}:{2}", dataRegistro.Hour, dataRegistro.Minute, dataRegistro.Second);

                    string veiculo = string.Format("{0} {1}", ((string)dataTableAgendamentos.Rows[i]["Marca"]), ((string)dataTableAgendamentos.Rows[i]["Modelo"]));
                    dataRow["Veiculo"] = veiculo;

                    dataRow["Placa"] = dataTableAgendamentos.Rows[i]["Placa"];
                                        
                    dataRow["StatusAtual"] = VerificaStatus((BLLEnumStatus)(int)dataTableAgendamentos.Rows[i]["StatusAtual"]);


                    // Adiciona linha ao DataTable.
                    dataTableGridView.Rows.Add(dataRow);

                }
            }
            return dataTableGridView;
        }

        public string VerificaStatus(BLLEnumStatus enume)
        {
            //Status 1-Agendado 2-Concluído 3-Cancelado 4-Não compareceu           
            string stringStatus = "Agendado";

            switch (enume)
            {
                case BLLEnumStatus.Concluído:
                    stringStatus = "Concluído";
                    break;
                case BLLEnumStatus.Cancelado:
                    stringStatus = "Cancelado";
                    break;
                case BLLEnumStatus.NãoCompareceu:
                    stringStatus = "Não Compareceu";
                    break;
                default:
                    break;
            }

            return stringStatus;
        }

        private void btnVoltar_Click(object sender, EventArgs e)
        {
            DateTime dataSelecionada = dtTimePck.Value;

            dtTimePck.Value = dataSelecionada.AddDays(-1);
        }

        private void btnAvancar_Click(object sender, EventArgs e)
        {
            DateTime dataSelecionada = dtTimePck.Value;

            dtTimePck.Value = dataSelecionada.AddDays(1);
        }

        private void dtTimePck_ValueChanged(object sender, EventArgs e)
        {
            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
        }

        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAgendar_Click(object sender, EventArgs e)
        {
            frmAgendamentoCadastro frmagendamentocadastro = new frmAgendamentoCadastro();
            frmagendamentocadastro.ShowDialog();
        }

        public void HabilitarBtnStatus(bool status)
        {
            btnAgendado.Enabled = status;
            btnCancelado.Enabled = status;
            btnConcluido.Enabled = status;
            btnFaltou.Enabled = status;

            btnAgendadoT.Enabled = status;
            btnCanceladoT.Enabled = status;
            btnconcluidoT.Enabled = status;
            btnFaltouT.Enabled = status;
        }

        private void dtGridViewManha_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F));
                this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
                this.tlpAgendamento.Size = new System.Drawing.Size(1362, 40);

                agendamentoID = (int)dtGridViewManha.Rows[e.RowIndex].Cells["AgendamentoIDD"].Value;

                string status = (string)dtGridViewManha.Rows[e.RowIndex].Cells["Status"].Value;

                HabilitarBtnStatus(true);

                if (status == "Agendado")
                {
                    btnAgendado.BackColor = Color.Green;
                    btnConcluido.BackColor = Color.FromArgb(111, 113, 126);
                    btnCancelado.BackColor = Color.FromArgb(111, 113, 126);
                    btnFaltou.BackColor = Color.FromArgb(111, 113, 126);

                }

                if (status == "Concluído")
                {
                    btnConcluido.BackColor = Color.Green;
                    btnAgendado.BackColor = Color.FromArgb(111, 113, 126); 
                    btnCancelado.BackColor = Color.FromArgb(111, 113, 126);
                    btnFaltou.BackColor = Color.FromArgb(111, 113, 126);

                    HabilitarBtnStatus(false);
                }

                if (status == "Cancelado")
                {
                    btnCancelado.BackColor = Color.Red;
                    btnConcluido.BackColor = Color.FromArgb(111, 113, 126);           
                    btnAgendado.BackColor = Color.FromArgb(111, 113, 126);                   
                    btnFaltou.BackColor = Color.FromArgb(111, 113, 126);

                    HabilitarBtnStatus(false);
                }

                if (status == "Não Compareceu")
                {
                    btnFaltou.BackColor = Color.Red;
                    btnCancelado.BackColor = Color.FromArgb(111, 113, 126);
                    btnConcluido.BackColor = Color.FromArgb(111, 113, 126);
                    btnAgendado.BackColor = Color.FromArgb(111, 113, 126);            

                    HabilitarBtnStatus(false);
                }
            }

        }

        private void dtGridViewTarde_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F));
                this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
                this.tlpAgendamento.Size = new System.Drawing.Size(1362, 40);

                agendamentoID = (int)dtGridViewTarde.Rows[e.RowIndex].Cells["AgendamentoIDT"].Value;

                string status = (string)dtGridViewTarde.Rows[e.RowIndex].Cells["StatusT"].Value;

                HabilitarBtnStatus(true);

                if (status == "Agendado")
                {
                    btnAgendadoT.BackColor = Color.Green;
                    btnconcluidoT.BackColor = Color.FromArgb(111, 113, 126);
                    btnCanceladoT.BackColor = Color.FromArgb(111, 113, 126);
                    btnFaltouT.BackColor = Color.FromArgb(111, 113, 126);
                }

                if (status == "Concluído")
                {
                    btnconcluidoT.BackColor = Color.Green;
                    btnAgendadoT.BackColor = Color.FromArgb(111, 113, 126);
                    btnCanceladoT.BackColor = Color.FromArgb(111, 113, 126);
                    btnFaltouT.BackColor = Color.FromArgb(111, 113, 126);

                    HabilitarBtnStatus(false);
                }

                if (status == "Cancelado")
                {
                    btnCanceladoT.BackColor = Color.Red;
                    btnconcluidoT.BackColor = Color.FromArgb(111, 113, 126);
                    btnAgendadoT.BackColor = Color.FromArgb(111, 113, 126);
                    btnFaltouT.BackColor = Color.FromArgb(111, 113, 126);


                    HabilitarBtnStatus(false);
                }

                if (status == "Não Compareceu")
                {
                    btnFaltouT.BackColor = Color.Red;
                    btnCanceladoT.BackColor = Color.FromArgb(111, 113, 126);
                    btnconcluidoT.BackColor = Color.FromArgb(111, 113, 126);
                    btnAgendadoT.BackColor = Color.FromArgb(111, 113, 126);      

                    HabilitarBtnStatus(false);
                }
            }

        }

        private void btnCancelado_Click(object sender, EventArgs e)
        {
            if (new frmMessageBox().Show("Deseja realmente alterar o status do agendamento para 'Cancelado'?\nO cancelamento não poderá ser revertido!", "Cancelamento", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                bllAgendamento.AtualizarStatus(agendamentoID, 3);
                this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
                this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
                dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);


            }
        }

        private void btnConcluido_Click(object sender, EventArgs e)
        {
            bllAgendamento.AtualizarStatus(agendamentoID, 2);
            this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
        }

        private void btnFaltou_Click(object sender, EventArgs e)
        {
            bllAgendamento.AtualizarStatus(agendamentoID, 4);
            this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
        }

        //Botões para o Grid da tarde

        private void btnCanceladoT_Click(object sender, EventArgs e)
        {
            if (new frmMessageBox().Show("Deseja realmente alterar o status do agendamento para 'Cancelado'?\nO cancelamento não poderá ser revertido!", "Cancelamento", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                bllAgendamento.AtualizarStatus(agendamentoID, 3);
                this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
                this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
                dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
            }
        }

        private void btnconcluidoT_Click(object sender, EventArgs e)
        {
            bllAgendamento.AtualizarStatus(agendamentoID, 2);
            this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
        }

        private void btnFaltouT_Click(object sender, EventArgs e)
        {
            bllAgendamento.AtualizarStatus(agendamentoID, 4);
            this.tlpAgendamento.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            this.tlpAgendamento.RowStyles[5] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0F));
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
        }

        private void chkTodos_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTodos.Checked)
            {
                chkAgendados.Checked = false;
                chkConcluidos.Checked = false;
                chkCancelados.Checked = false;
                chkFaltou.Checked = false;
            }
            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
        }

        private void chkAgendados_CheckedChanged(object sender, EventArgs e)
        {
            if (chkAgendados.Checked)
                status = 1;
            else
                status = 0;

            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
        }

        private void chkConcluidos_CheckedChanged(object sender, EventArgs e)
        {
            if (chkConcluidos.Checked)
                status2 = 2;
            else
                status2 = 0;

            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
        }

        private void chkCancelados_CheckedChanged(object sender, EventArgs e)
        {
            if (chkCancelados.Checked)
                status3 = 3;
            else
                status3 = 0;

            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
        }

        private void chkFaltou_CheckedChanged(object sender, EventArgs e)
        {
            if (chkFaltou.Checked)
                status4 = 4;
            else
                status4 = 0;

            dtGridViewManha.DataSource = PopulaGrid(dtTimePck.Value, 0);
            dtGridViewTarde.DataSource = PopulaGrid(dtTimePck.Value, 1);
        }
        
        public DataTable PopulaGrid(DateTime data, byte turno, string texto)
        {
            DataTable dataTableGridView = new DataTable();
            DataRow dataRow;

            if (chkTodos.Checked)
            {
                dataTableAgendamentos = bllAgendamento.BuscarAgendamentoPorDataeStatusPesquisa(data, turno, 1, 2, 3, 4, texto);
            }
            else
            {
                dataTableAgendamentos = bllAgendamento.BuscarAgendamentoPorDataeStatusPesquisa(data, turno, status, status2, status3, status4, texto);
            }

            if (dataTableAgendamentos.Rows.Count > 0)
            {
                dataTableGridView.Columns.Add("AgendamentoID", typeof(int));
                dataTableGridView.Columns.Add("NomeCompleto", typeof(string));
                dataTableGridView.Columns.Add("Contato", typeof(string));
                dataTableGridView.Columns.Add("HoraRegistro", typeof(string));
                dataTableGridView.Columns.Add("Veiculo", typeof(string));
                dataTableGridView.Columns.Add("Placa", typeof(string));
                dataTableGridView.Columns.Add("StatusAtual", typeof(string));

                for (int i = 0; i < dataTableAgendamentos.Rows.Count; i++)
                {
                    dataRow = dataTableGridView.NewRow();

                    dataRow["AgendamentoID"] = dataTableAgendamentos.Rows[i]["AgendamentoID"];

                    string nomeCompleto = string.Format("{0} {1}", ((string)dataTableAgendamentos.Rows[i]["Nome"]), ((string)dataTableAgendamentos.Rows[i]["Sobrenome"]));
                    dataRow["NomeCompleto"] = nomeCompleto;

                    string contato = string.Format("{0} / {1}", ((string)dataTableAgendamentos.Rows[i]["Telefone"]), ((string)dataTableAgendamentos.Rows[i]["Celular"]));
                    dataRow["Contato"] = contato;

                    DateTime dataRegistro = Convert.ToDateTime(dataTableAgendamentos.Rows[i]["DataRegistro"]);
                    dataRow["HoraRegistro"] = string.Format("{0}:{1}:{2}", dataRegistro.Hour, dataRegistro.Minute, dataRegistro.Second);

                    string veiculo = string.Format("{0} {1}", ((string)dataTableAgendamentos.Rows[i]["Marca"]), ((string)dataTableAgendamentos.Rows[i]["Modelo"]));
                    dataRow["Veiculo"] = veiculo;

                    dataRow["Placa"] = dataTableAgendamentos.Rows[i]["Placa"];
                    dataRow["StatusAtual"] = VerificaStatus((BLLEnumStatus)(int)dataTableAgendamentos.Rows[i]["StatusAtual"]);


                    // Adiciona linha ao DataTable.
                    dataTableGridView.Rows.Add(dataRow);

                }
            }
            return dataTableGridView;
        }

        private void btnPesquisar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtPesquisar.Text))
            {
                PopulaGrid(dtTimePck.Value, 0, txtPesquisar.Text);
                PopulaGrid(dtTimePck.Value, 1, txtPesquisar.Text);
            }
        }

        private void txtPesquisar_TextChanged(object sender, EventArgs e)
        {

        }

        private void frmAgendamentoListar_Load(object sender, EventArgs e)
        {

        }          

    }
}
